/**
 * Trabajo de Ingeniería de Software 2
 * Año 2008
 * Sistema de Reserva de Recursos.
 * Desarrolladores: - Marcelo Ferreira.
 *                  - Christian Gómez.
 *                  - Marcelo Rodas.
 */


package controller;

import java.util.regex.Pattern;
import java.util.regex.Matcher;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import modelo.Permisorol;
import modelo.PermisorolPK;

/**
 * Clase utilizada para Transportar y Transformar la Entidad Permisorol
 * entre JSPs.
 * @author cgomez
 */
public class PermisorolConverter implements Converter {

    /**
     * Función para obtener un Objeto Permisorol del string 
     * transmitido y que representa el Objeto resultante.
     * @param facesContext
     * @param component
     * @param string
     * @return Object (Permisorol)
     */
    public Object getAsObject(FacesContext facesContext, UIComponent component, String string) {
        if (string == null || string.length() == 0) {
            return null;
        }
        PermisorolPK id = new PermisorolPK();
        String[] params = new String[2];
        int p = 0;
        int grabStart = 0;
        String delim = "#";
        String escape = "~";
        Pattern pattern = Pattern.compile(escape + "*" + delim);
        Matcher matcher = pattern.matcher(string);
        while (matcher.find()) {
            String found = matcher.group();
            if (found.length() % 2 == 1) {
                params[p] = string.substring(grabStart, matcher.start());
                p++;
                grabStart = matcher.end();
            }
        }
        if (p != params.length - 1) {
            throw new IllegalArgumentException("string " + string + " is not in expected format. expected 2 ids delimited by " + delim);
        }
        params[p] = string.substring(grabStart);
        for (int i = 0; i < params.length; i++) {
            params[i] = params[i].replace(escape + delim, delim);
            params[i] = params[i].replace(escape + escape, escape);
        }

        id.setIdRol(Integer.parseInt(params[0]));
        id.setIdPermiso(Integer.parseInt(params[1]));
        PermisorolController controller = (PermisorolController) facesContext.getApplication().getELResolver().getValue(facesContext.getELContext(), null, "permisorol");

        return controller.findPermisorol(id);
    }

    /**
     * Función para obtener como Cadena un Objeto PermisoRol para pasar 
     * como parametro entre paginas web.
     * @param facesContext
     * @param component
     * @param object
     * @return String
     */
    public String getAsString(FacesContext facesContext, UIComponent component, Object object) {
        if (object == null) {
            return null;
        }
        if (object instanceof Permisorol) {
            Permisorol o = (Permisorol) object;
            PermisorolPK id = o.getPermisorolPK();
            if (id == null) {
                return "";
            }
            String delim = "#";
            String escape = "~";
            String idRol = String.valueOf(id.getIdRol());
            idRol = idRol.replace(escape, escape + escape);
            idRol = idRol.replace(delim, escape + delim);
            String idPermiso = String.valueOf(id.getIdPermiso());
            idPermiso = idPermiso.replace(escape, escape + escape);
            idPermiso = idPermiso.replace(delim, escape + delim);
            return idRol + delim + idPermiso;
        } else {
            throw new IllegalArgumentException("object " + object + " is of type " + object.getClass().getName() + "; expected type: modelo.Permisorol");
        }
    }

}
